import axios from '../../src/index'

axios('/extend/post',{
  method: 'post',
  data: {
    msg: 'hi'
  }
})

// axios({
//   url: '/extend/post',
//   method: 'post',
//   data: {
//     msg: 'hi'
//   }
// })
//
// axios.request({
//   url: '/extend/post',
//   method: 'post',
//   data: {
//     msg: 'hello'
//   }
// })
//
// axios.get('/extend/get')
//
// axios.options('/extend/options')
//
// axios.delete('/extend/delete')
//
// axios.head('/extend/head')
//
// axios.post('/extend/post', { msg: 'post' })
//
// axios.put('/extend/put', { msg: 'put' })
//
// axios.patch('/extend/patch', { msg: 'patch' })

// axios({
//   url: '/extend/post',
//   method: 'post',
//   data: {
//     msg: 'hi'
//   }
// })
//
// axios('/extend/post', {
//   method: 'post',
//   data: {
//     msg: 'hello'
//   }
// })




interface ResponseData<T = any> {
  code: number
  result: T
  message: string
}

interface User {
  name: string
  age: number
}

function getUser<T>() {
  return axios<ResponseData<T>>('/extend/user')
    .then(res => res.data)
    .catch(err => console.error(err))
}


async function test() {
  const user = await getUser<User>()
  if (user) {
    console.log(user.result.name)
  }
}

test()

/*
// 泛型理解
function identity<T>(arg: T): T {
  return arg;
}
const res = identity<number>(2)

interface GenericIdentityFn<T> {
  (arg: T): T;
}

let myIdentity: GenericIdentityFn<number> = identity;
const res2 = myIdentity(2)

interface GenericIdentityFn02 {
    <T>(arg: T): T;
}

let myIdentity02: GenericIdentityFn02 = identity;
const res02 = myIdentity02<string>('2')
*/



/**
 * 整改泛型过程理解
 * 
 * 


// 响应类型
interface AxiosResponse<T = any> {
  data: T; // 服务端返回数据
  status: number; // http状态码
  statusText: string;
}

// ajax请求返回promise对象接口声明
interface AxiosPromise<T = any> extends Promise<AxiosResponse<T>> {}

interface GenericIdentityFn {
  <T>(arg: any): AxiosPromise<T>;
}

// 模拟ajax请求
function identity(arg: any): AxiosPromise {
  return new Promise((resolve, reject) => {
    let response: AxiosResponse = {
      data: {
        code: 200,
        msg: "success",
        result: { name: "mappping", age: 30 },
      },
      status: 200,
      statusText: "ok",
    };
    resolve(response);
  });
}

interface ResponseData<T = any> {
  code: number;
  result: T;
  message: string;
}

interface User {
  name: string;
  age: number;
}

let myIdentity: GenericIdentityFn = identity;
let res = myIdentity<ResponseData<User>>("1").then(res => {
  let data = res.data;
  console.log(data.result.age)
})
*/